TOSTRING(
#version 330 core \n
#pragma optimize(on) \n

layout(points) in;
layout(triangle_strip, max_vertices = 4) out;

uniform struct Transform {
	mat4	MVP;
} unTransform;


in	TVertexData {
	vec4	vRect;		/* left, top, right, bottom */
	vec4	vColor;
	vec4	vTexcoord;	/* left, top, right, bottom */
	float	fDepth;
} Input[];


out	TGeomData {
	vec4	vColor;
	vec2	vTexcoord;
} Output;


out gl_PerVertex {
	vec4	gl_Position;
};


void main()
{
	gl_Position		 = vec4( Input[0].vRect.x, Input[0].vRect.y, Input[0].fDepth, 1.0 ) * unTransform.MVP;
	Output.vTexcoord = vec2( Input[0].vTexcoord.x, Input[0].vTexcoord.w );
	Output.vColor	 = Input[0].vColor;
	EmitVertex();
	
	gl_Position		 = vec4( Input[0].vRect.x, Input[0].vRect.w, Input[0].fDepth, 1.0 ) * unTransform.MVP;
	Output.vTexcoord = vec2( Input[0].vTexcoord.x, Input[0].vTexcoord.y );
	Output.vColor	 = Input[0].vColor;
	EmitVertex();
	
	gl_Position		 = vec4( Input[0].vRect.z, Input[0].vRect.y, Input[0].fDepth, 1.0 ) * unTransform.MVP;
	Output.vTexcoord = vec2( Input[0].vTexcoord.z, Input[0].vTexcoord.w );
	Output.vColor	 = Input[0].vColor;
	EmitVertex();
	
	gl_Position		 = vec4( Input[0].vRect.z, Input[0].vRect.w, Input[0].fDepth, 1.0 ) * unTransform.MVP;
	Output.vTexcoord = vec2( Input[0].vTexcoord.z, Input[0].vTexcoord.y );
	Output.vColor	 = Input[0].vColor;
	EmitVertex();
	
	EndPrimitive();
}
)